<?php

/**
 * Class _queue
 * 队列操作, 基础类, 勿删
 */
class _queue
{

    public $queueKey = '';

    /**
     * 写入队列
     * 队列名统一都在RedisConfig类中维护
     */
    public function push($project, $params)
    {
        $queueKey = RedisConfig::getQueueKey($project);
        return IRedis::pushQueue($queueKey, $params);
    }
    
    /**
     * 阻塞出队列, 处理某个队列
     * 配合crontab 或 supervisor等进程监控程序使用 * * * * * cd path/to/code && php cli.php -q queue_blockpop_(queue_name)
     * 队列名统一都在RedisConfig类中维护
     */
    public function blockpop()
    {
        if (Fun::isProcessRun(Route::$path, 2)) {
            echo Fun::getDateTime().' 进程已经在运行. '.Route::$path.PHP_EOL;
            return true;
        }

        echo Fun::getDateTime().' 启动进程. '.Route::$path.PHP_EOL;
        $queueKey = Request::Route('queueKey');
        IRedis::blockPopQueue($queueKey);
    }

    /**
     * 阻塞出队列, 处理配置文件中的所有read队列
     * 配合crontab 或 supervisor等进程监控程序使用 * * * * * cd path/to/code && php cli.php -q queue_brpop_all
     * 队列名统一都在RedisConfig类中维护
     */
    public function blockpopAll()
    {
        if (Fun::isProcessRun(Route::$path, 2)) {
            echo Fun::getDateTime().' 进程已经在运行. '.Route::$path.PHP_EOL;
            return true;
        }

        echo Fun::getDateTime().' 启动进程. '.Route::$path.PHP_EOL;
        $queueList = RedisConfig::getAllQueueKeyRead();
        IRedis::blockPopQueue($queueList, 50);
    }
    
    /**
     * 退出pop进程
     */
    public function kill()
    {
        $queueKey = Request::Route('queueKey');
        IRedis::killPopQueue($queueKey);
    }

    /**
     * 重启pop进程
     * 在部署了新代码的时候用到
     * @param string $project 
     */
    public function restart($project)
    {
        $queueKey = RedisConfig::getQueueKey($project, 'r');
        IRedis::restartQueue($queueKey);
    }

    public function test()
    {
        $queueKey = Request::Route('qk');
        $queueVal = Request::Route('qv');
        var_dump($queueKey, $queueVal);

        $rs = IRedis::pushQueue($queueKey, $queueVal);
        var_dump($rs);
    }
}